// 联合类型
type orderId = number | string | bigint;

// 交叉类型
type Person = {
  name: string;
}

type Dog = {
  age: string;
}

type Animal = Person & Dog;

const animal : Animal = {
  name: '1111',
  age: '23'
}

// 泛型
type node<T> ={
  name: string,
  age: string,
  info: T,
}

const node1: node<{like: string[]}> ={
  name: '111',
  age: '222',
  info: {like: ['1', '2']},
}

// 三目运算符
// extends
// 继承 
// 约束泛型 
// 条件类型
// type isString<T> = T extends string ? true: false;

// 派生类型 pick 要什么取什么  omit 不要什么丢什么
type info ={
  name: string,
  age: string,
  sex: string,
}
type info1 = Pick<info, 'name'>;

type info2 = Omit<info, 'name'>;

// 类型保护
type Value = string | number;
function isString(value: Value) : value is string{
  return typeof value == 'string'
}

const s = isString('1111');